package com.quick.develop.flowable.service.process;

import com.quick.develop.framework.common.page.PageResult;
import com.quick.develop.flowable.domain.entrust.BpmEntrustDueReqVO;
import com.quick.develop.flowable.domain.entrust.BpmEntrustEx;
import com.quick.develop.flowable.domain.entrust.BpmEntrustExPageReqVO;
import com.quick.develop.flowable.domain.entrust.BpmEntrustInfoReqVO;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author junyuan.liu
 * @description:
 * @date 2022/9/4 14:41
 */
public interface IBpmEntrustExService {
    /** 
     * @description 
     * @param reqVO 参数
     * @return com.quick.develop.framework.domain.PageResult<com.quick.develop.flowable.domain.entrust.BpmEntrustEx>
     * @author junyuan.liu
     * @date 2022/9/4 15:56
     */ 
    PageResult<BpmEntrustEx> selectPage(BpmEntrustExPageReqVO reqVO);
    
    /** 
     * @description 
     * @param entity 参数
     * @author junyuan.liu
     * @date 2022/9/4 15:56
     */ 
    int addEntrust(BpmEntrustEx entity);
    
    /** 
     * @description 
     * @param entity 参数
     * @author junyuan.liu
     * @date 2022/9/5 9:22
     */
    int updateEntrust(BpmEntrustEx entity);
    
    /** 
     * @description 判断流程委托是否已存在
     * @param entity 参数
     * @return boolean
     * @author junyuan.liu
     * @date 2022/9/6 10:32
     */ 
    boolean isExist(BpmEntrustEx entity);
    
    /** 
     * @description 
     * @param ids id
     * @author junyuan.liu
     * @date 2022/9/5 9:34
     */
    int deleteEntrust(Long[] ids);
    
    /** 
     * @description 获取委托数据
     * @param reqVO 参数
     * @return java.util.List<com.quick.develop.flowable.domain.entrust.BpmEntrustEx>
     * @author junyuan.liu
     * @date 2022/9/6 9:37
     */ 
    List<BpmEntrustEx> getEntrustList(@Valid BpmEntrustInfoReqVO reqVO);
    
    /** 
     * @description 获取委托人
     * @param reqVO 请求参数
     * @return java.util.Map<java.lang.String,java.lang.String>
     * @author junyuan.liu
     * @date 2022/9/6 11:06
     */ 
    Map<String, String> getEntrustUserMap(@Valid BpmEntrustInfoReqVO reqVO);
    
    /** 
     * @description 查询是否有委托 有的话替换原来的人 没有返回原来的人 会去重
     * @param reqVO 参数
     * @return java.util.Set<java.lang.String>
     * @author junyuan.liu
     * @date 2022/9/6 13:24
     */ 
    Set<String> getEntrustUserSet(@Valid BpmEntrustInfoReqVO reqVO);
    
    /** 
     * @description 查询是否有委托 有的话替换原来的人 没有返回原来的人 不去重
     * @param reqVO 参数 users 必须赋值
     * @return java.util.List<java.lang.String>
     * @author junyuan.liu
     * @date 2022/9/6 13:47
     */ 
    List<String> getEntrustUserList(@Valid BpmEntrustInfoReqVO reqVO);
    
    /** 
     * @description 查询委托人
     * @param reqVO 参数 user必须赋值
     * @return java.lang.String
     * @author junyuan.liu
     * @date 2022/9/7 16:23
     */ 
    String getEntrustUser(@Valid BpmEntrustInfoReqVO reqVO);

    /** 
     * @description 获取过期的委托
     * @param reqVO entrustUser必须赋值
     * @return com.quick.develop.flowable.domain.entrust.BpmEntrustEx
     * @author junyuan.liu
     * @date 2022/9/8 11:13
     */ 
    BpmEntrustEx getOverdueEntrust(@Valid BpmEntrustDueReqVO reqVO);
    
    /** 
     * @description 获取过期的委托
     * @param reqVO entrustUsers必须赋值
     * @return java.util.List<com.quick.develop.flowable.domain.entrust.BpmEntrustEx>
     * @author junyuan.liu
     * @date 2022/9/7 19:13
     */ 
    List<BpmEntrustEx> getOverdueEntrustList(@Valid BpmEntrustDueReqVO reqVO);
    
}
